'use strict';

module.exports = appInfo => {
    const config = {};

    config.keys = "youdo";

    config.view = {
        defaultViewEngine: 'nunjucks',
        mapping: {
            '.tpl': 'nunjucks'
        }
    };

    config.gzip = {
        threshold: 1024, // 小于 1k 的响应体不压缩
    };

    //数据增删查改业务连接配置
    config.sequelize = {
        dialect: 'mysql', // support: mysql, mariadb, postgres, mssql
        port: 3318,//数据库端口
        host: '119.3.132.225',
        username: 'youdoiot',
        password: 'peBYmcAwsp5fxraT',
        database: 'youdoiot',
        define: {
            timestamps: false,//不对表model自动添加createAt和updateAt字段
            underscored: false,//禁止对字段进行驼峰转换
            freezeTableName: true//禁止修改表名
        },
        // timezone: '+06:30',// 保存为本地时区
        timezone: '+08:00',// 保存为本地时区
        dialectOptions: {//egg-sequelize在读取时间时，还是会返回UTC格式
            dateStrings: false,
            typeCast(field, next) {
                if (field.type === "DATETIME") {
                    return field.string();
                }
                return next();
            }
        }
    };

    //初始化文件生成 mysql连接设置
    config.mysql = {
        //数据库信息配置
        client: {
            host: '119.3.132.225',// IP地址
            port: '3318',//数据库端口
            user: "youdoiot",// 数据库用户名
            password: 'peBYmcAwsp5fxraT', // 数据库密码
            database: 'youdoiot'// 连接到的数据库
        },
        app: true,// 是否加载到 app 上，默认开启
        agent: false// 是否加载到 agent 上，默认关闭
    };


    //初始化文件生成相关配置
    config.needs = {
        database: 'youdoiot',//数据库名称
        //文件夹名称列表,用于组装对应的控制类和model
        dirNameList: ['v1'],
        //数据库分组创建对应的目录文件
        databaseGrouping: {},
        //不再创建任何controller及model
        noLongerCreate: []
    };

    config.jwt = {
        secret: 'youdo_secret'
    }

    //文件上传相关限制
    config.multipart = {
        fileSize: '150mb',//文件上传的大小限制
        fileExtensions: [
            '.zip',
            '.exe',
            '.apk',
            '.mp3',
            '.wav',
            '.flac',
            '.WAV',
            '.ogg',
            '.*',
            '.log',
            '.amr'
        ],
        fields: 50//表单上传字段限制的个数
    };


    config.bodyParser = {
        jsonLimit: '5mb',
        formLimit: '6mb',
    };

    //安全机制
    config.security = {
        csrf: {
            enable: false,
            headerName: 'x-csrf-token',// 自定义请求头
            // 判断是否需要 ignore 的方法，请求上下文 context 作为第一个参数
            ignore: ctx => {
                if (ctx.request.url == '/alipay/alipayNotify' || ctx.request.url == '/weixinpay/weixinpayNotify') {
                    return true;
                }
                return false;
            }
        }
    };

    //跨域相关设置
    config.cors = {
        origin: '*',
        allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'
    };

    //redis
    config.redis = {
        client: {
            port: 6379,
            host: '127.0.0.1',
            password: '',
            db: 0
        },
    };

    //阿里云短信
    config.aliSMS = {
        isopen: true, // 是否开启短信发送
        expire: 15, // 短信验证码有效期 单位分钟
        accessKeyId: 'LTAI4FzmRW8Km3TGvRNAmrF8',
        accessKeySecret: 'CBZtKcrn5Jj6drRSaFp06UmQvjy2Vh',
        endpoint: 'https://dysmsapi.aliyuncs.com',
        apiVersion: '2017-05-25',
        regionId: "cn-hangzhou",
        signName: "P2POC"
    };
    //微信相关配置
    config.weChat = {
        appid: 'wx86e747f1ba02e1e6',
        secret: 'edcf356492bf5f2cb116bb9b949e28e2'
    };

    config.swaggerdoc = {
        dirScanner: './app/controller',
        apiInfo: {
            title: 'egg-swagger',
            description: 'swagger-ui for egg',
            version: '1.0.0',
        },
        schemes: ['http', 'https'],
        consumes: ['application/json'],
        produces: ['application/json'],
        securityDefinitions: {
            // apikey: {
            //   type: 'apiKey',
            //   name: 'clientkey',
            //   in: 'header',
            // },
            // oauth2: {
            //   type: 'oauth2',
            //   tokenUrl: 'http://petstore.swagger.io/oauth/dialog',
            //   flow: 'password',
            //   scopes: {
            //     'write:access_token': 'write access_token',
            //     'read:access_token': 'read access_token',
            //   },
            // },
        },
        enableSecurity: false,
        // enableValidate: true,
        routerMap: false,
        enable: true,
    };

    return config;
}
